﻿/*
 * Created by SharpDevelop.
 * User: Lousabit
 * Date: 05/10/2011
 * Time: 15:46
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Ventas
{
	/// <summary>
	/// Description of Form1.
	/// </summary>
	public partial class GUIBuscarPedidoVenta : Form
	{
		private int idCliente;
		private BLPedidoVenta blPedidoVenta;
		
		public GUIBuscarPedidoVenta()
		{
			try{
				InitializeComponent();
				
				idCliente = -1;
			}catch(Exception ex){
				Utils.MessageError("Error al crear la ventana.", ex);
			}
			
		}
				
		void EstadoLBLClick(object sender, EventArgs e)
		{
			
		}
		
		void BuscarBTNClick(object sender, EventArgs e)
		{
			cargarGrid();
		}
		
		public void cargarGrid(){
			try{
				
				if (fechaDTP.Value.CompareTo(fechaFinDTP.Value) > 0){
					Utils.MessageAviso("La fecha de inicio no debe ser mayor a la fecha de fin");
					return;
				}
				
				int idPedido = -1;
				try{
					idPedido = int.Parse(idTB.Text);
				}
				catch(Exception e){
					//idPedido = -1;
				}
				
				ventasDGV.Rows.Clear();
				
				blPedidoVenta = new BLPedidoVenta();
				
				BECliente cliente = new BECliente();
				
				cliente.IdCliente = idCliente;
				
				int idEstado = (int)estadoCB.SelectedValue;
								
				blPedidoVenta.populate(new BEPedidoVenta(idPedido, fechaDTP.Value, new BEEstadoPedidoVenta(idEstado, "X"), cliente), fechaFinDTP.Value);
				
				//ventasDGV.DataSource = blPedidoVenta.getLista();

				foreach(BEPedidoVenta venta in blPedidoVenta.getLista()){
					ventasDGV.Rows.Add();
					DataGridViewRow row = ventasDGV.Rows[ventasDGV.Rows.Count-1];
					row.Cells["Codigo"].Value = venta.Id;
					row.Cells["Cliente"].Value = venta.Cliente.Nombre + " "+venta.Cliente.ApellidoPaterno;
					row.Cells["Estado"].Value = venta.Estado.Descripcion;
					
					row.Cells["Fecha"].Value = venta.Fecha.Date;
					ventasDGV.Columns["Fecha"].DefaultCellStyle.Format = "dd/MM/yyyy";
				
					row.Cells["N"].Value = blPedidoVenta.getLista().IndexOf(venta);
				}
				
				cantidadPedidosLBL.Text = ""+blPedidoVenta.getLista().Count+" pedidos de venta";
				
			}catch(Exception ex){
				Utils.MessageError("Error al cargar la lista de pedidos de venta.", ex);
			}
			
		}
		
		void GUIBuscarPedidoVentaLoad(object sender, EventArgs e)
		{
			try{
				ventasDGV.AutoGenerateColumns = false;
				
				estadoCB.DataSource = BLPedidoVenta.getEstados();
				estadoCB.DisplayMember = "Descripcion";
				estadoCB.ValueMember = "Id";
				
				fechaDTP.Value = DateTime.Now.Date;
				fechaFinDTP.Value = fechaDTP.Value;
			}catch(Exception ex){
				Utils.MessageError("Error al cargar la ventana.", ex);
			}
		}
		
		void VentasDGVCellContentClick(object sender, DataGridViewCellEventArgs e)
		{
			
		}
		
		void BuscarClienteBTNClick(object sender, EventArgs e)
		{
			
			try{
				GUI.Ventas.GUIMantenimientoCliente v = new GUI.Ventas.GUIMantenimientoCliente(true);
				v.ShowDialog(this);
						
				BECliente cliente = v.ClienteSeleccionado;
				
				if (cliente != null){
					idCliente = cliente.IdCliente;
					clienteTB.Text = cliente.Nombre+" "+cliente.ApellidoPaterno;
				}
				
				
				
			}catch(Exception ex){
				Utils.MessageError("Error al buscar cliente.", ex);
			}
		}
				
		
		void VerBTNClick(object sender, EventArgs e)
		{
			try{
				/*
				if (ventasDGV.SelectedRows==null || ventasDGV.SelectedRows.Count == 0) return;
				int i = ventasDGV.SelectedRows[0].Index;
				BEPedidoVenta pedidoVenta = blPedidoVenta.getLista()[i];
				*/
				
				BEPedidoVenta pedidoVenta = null;
				
				List<int> ind = Utils.getCheckedIndexes(ventasDGV, "Eliminar", "N");
				if(ind != null && ind.Count != 0){
					if (ind.Count > 1){
						Utils.MessageAviso("Seleccionar solo un pedido.");
						return;
					}
					pedidoVenta = blPedidoVenta.getLista()[ind[0]];
				}else{
					return;
				}
				
				pedidoVenta = BLPedidoVenta.getPedidoCompletoById(pedidoVenta.Id);
				GUIPedidoVenta v = new GUIPedidoVenta(pedidoVenta);
				v.Show(this);
				
				if (v.CambiarGrillaPadre){
					this.cargarGrid();
				}
				
			}catch(Exception ex){
				Utils.MessageError("Error al intentar ver pedido.", ex);
			}
		}
		
		
		void Button1Click(object sender, EventArgs e)
		{
			
		}
		
		void FiltrosGBEnter(object sender, EventArgs e)
		{
			
		}
		
		void NuevoBTNClick(object sender, System.EventArgs e)
		{
			try{
				GUI.Ventas.GUIPedidoVenta v = new GUI.Ventas.GUIPedidoVenta(null);
				v.ShowDialog(this);
				
				if (v.CambiarGrillaPadre){			
					cargarGrid();
				}
				
			}catch(Exception ex){
				Utils.MessageError("Error al intentar crear nuevo pedido.", ex);
			}
		}
		
		void EliminarClick(object sender, EventArgs e)
		{
			try{
				//obtener indices marcados
				List<int> listaIndicesEliminar = Utils.getCheckedIndexes(ventasDGV, "Eliminar", "N");
				
				String strNop = "";
				
				foreach(int i in listaIndicesEliminar){
					//el estado 5 es el estado de anulado
					//BLPedidoVenta.cambiarEstado(ventas[i].Id, 5);
					
					if (blPedidoVenta.getLista()[i].Estado.Id == 3){
						strNop += " "+blPedidoVenta.getLista()[i].Id;
					}
					else{
						BLPedidoVenta.anular(blPedidoVenta.getLista()[i]);
					}
				}			
								
				cargarGrid();
				
				if (strNop != ""){
					Utils.MessageAviso("Los siguientes pedidos de venta no se pudieron eliminar por estar pagados:\n"+strNop);
				}
				
			}catch(Exception ex){
				Utils.MessageError("Error al intentar eliminar pedidos.", ex);
			}
		}
		
		void FechaLBLClick(object sender, EventArgs e)
		{
			
		}
		
		void EstadoCBSelectedIndexChanged(object sender, EventArgs e)
		{
			
		}
		
		void IdTBTextChanged(object sender, EventArgs e)
		{
			
		}
		
		void IdTBKeyPress(object sender, KeyPressEventArgs e)
		{
			Utils.SoloNumerosTB(sender, e);
		}
		
		void FechaDTPValueChanged(object sender, EventArgs e)
		{
			Utils.dateMenorQue(fechaDTP, fechaFinDTP);
		}
		
		void FechaFinDTPValueChanged(object sender, EventArgs e)
		{
			Utils.dateMenorQueNow(sender, e);
		}
		
		void VentasDGVMouseDoubleClick(object sender, MouseEventArgs e)
		{
			Utils.checkDobleClick(ventasDGV, "Eliminar");
		}
		
		void SeleccionarCHBCheckedChanged(object sender, EventArgs e)
		{
			Utils.seleccionarTodo(ventasDGV, sender, "Eliminar");
		}
		
		void GUIBuscarPedidoVentaMouseDoubleClick(object sender, MouseEventArgs e)
		{
			
		}
		
		void VentasDGVCellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
		{

		}
		
		void VentasDGVCellDoubleClick(object sender, DataGridViewCellEventArgs e)
		{
			Utils.checkDobleClick(ventasDGV, "Eliminar");
		}
	}
}
